// PROGRAMA : IDCPC005
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : EDU/FM DATA: 30/06/92
// OBJETIVO : CONSULTA/EMISSAO POR FORMULA DATILOSCOPICA. 'CFD'
// ATUALIZACOES DATA
// PROGRAMA : IDCPC005 03/11/1997
// BIBLIOTECA : SISP
// PROGRAMADOR :
// OBJETIVO : ADAPTACAO PARA O SHOPPING DO CIDADAO (P200)
// : ALTERACAO DE TELA 28/09/1999
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcpc005Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcpc005A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc001;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc005;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.Idclc001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.model.Tablele;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpc005 OBJETIVO : CONSULTA/EMISSAO POR FORMULA DATILOSCOPICA. 'CFD' *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idcpc005")
public class Idcpc005 {
	// Views utilizadas
	DidCadastro vwDidcad = new DidCadastro();
	SicControle vwDvecon = new SicControle();
	// Telas/relatorios utilizados
	Idcpc005A idcpc005A;
	Idctc001 idctc001;
	Idctc005 idctc005;
	Idcpc005Report report;
	// Includes utilizados
	Idclc001 idclc001 = new Idclc001();
	Sisll001 sisll001 = new Sisll001();
	Tablele tablele = new Tablele();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	Idccc001 idccc001;

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Idcpc005 idcpc005Anterior;
	String faseproc = "0";
	int nroReg = 1;

	private int i = 0;
	private int iAte = 0;
	private String dir = "";
	private String esq = "";

	private Idcpc005A preMapas() {
		int ind;
		idccc001 = new Idccc001(result, sessao);
		idcpc005A = new Idcpc005A(true, sessao);
		idctc001 = new Idctc001(true, sessao);
		idctc005 = new Idctc005(true, sessao);
		for (ind = 1; ind <= 2; ind++) {
			idcpc005A.setConimp(ind, "");
		}
		for (ind = 1; ind <= 14; ind++) {
			idctc005.setMdir(ind, "");
			idctc005.setMesq(ind, "");
			idctc005.setReg0(ind, 0);
			idctc005.setNom0(ind, "");
			idctc005.setNas0(ind, 0);
			idctc005.setUfn0(ind, "");
		}
		idctc001.setDataCorrente(UtilBean.obtemDataDia());
		// Par�grafo: inicio()
		return idcpc005A;
	}

	public Idcpc005(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Idcpc005A idcpc005A, Idctc001 idctc001, Idctc005 idctc005) {
		try {
			main(idcpc005A, idctc001, idctc005);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Idcpc005A pidcpc005A, Idctc001 pidctc001, Idctc005 pidctc005) throws Exception {
		int ret = 0;

		if (pidcpc005A == null && pidctc001 == null && pidctc005 == null) {
			primeiraVez = true;
			// idctc005 = new Idctc005 (primeiraVez);
			idcpc005A = preMapas();
			idcpc005A.setNavegar("../idcpc005/executar");
			result.include("idctc005", idctc005);
			sessao.setAtributo("IDCPC005", this);
			idcpc005A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pidcpc005A, pidctc001, pidctc005);
		}

		idctc001.setConf("S");
		// DEFINE PRINTER(MMC = 1)

		if (pidcpc005A != null) {
			idcpc005A.receberTela(false, result);
			if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
				idcpc005A.enviarMensagem(null, "");
				return;
			}
			if (!idctc001.getOperacao().equals("CFD")) {
				rotOpcao();
			}
			if (UtilBean.validaSelecao(idcpc005A.getConimp())) {
				idcpc005A.enviarMensagem("pol3", "");
				return;
			}
			if (idcpc005A.getMaodir().trim().equals("") && idcpc005A.getMaoesq().trim().equals("")) {
				idcpc005A.enviarMensagem("operacao", "INFORME, PELO MENOS, UM DATILOGRAMA");
				return;
			}
		}
		if (!idcpc005A.getConimp(2).trim().equals("")) {
			relatorio();
		} else {
			if (idcpc005A.getPol2().trim().equals("") || idcpc005A.getInd2().trim().equals("") || idcpc005A.getMed2().trim().equals("") || idcpc005A.getAnu2().trim().equals("") || idcpc005A.getMin2().trim().equals("") || idcpc005A.getInd3().trim().equals("") || idcpc005A.getMed3().trim().equals("") || idcpc005A.getAnu3().trim().equals("") || idcpc005A.getMin3().trim().equals("")) {

				while (vwDidcad.leituraMaoDireitaMaiorig(idcpc005A.getAnu2(), idcpc005A.getInd2(), idcpc005A.getMed2(), idcpc005A.getMin2(), idcpc005A.getPol2())) {
					ret = carregaFormula(pidctc005);
					if (idctc005.getConf().equals("N")) {
						break;
					}
				}
				if (vwDidcad.fimDados()) {
					if (i > 0) {
						ret = saida(pidctc005);
					}
				}

			} else {
				while (vwDidcad.pesquisaMaoDireitaMaoEsquerda(idcpc005A.getAnu2(), idcpc005A.getInd2(), idcpc005A.getMed2(), idcpc005A.getMin2(), idcpc005A.getPol2(), // maodir,
						idcpc005A.getAnu3(), idcpc005A.getInd3(), idcpc005A.getMed3(), idcpc005A.getMin3(), idcpc005A.getPol3() // maoesq
				)) {
					// public boolean pesquisaMaoDireitaMaoEsquerda(
					// String pAnularDireito, String pIndicadorDireito, String
					// pMedioDireito, String pMinimoDireito, String
					// pPolegarDireito,
					// String pAnularEsquerdo, String pIndicadorEsquerdo, String
					// pMedioEsquerdo, String pMinimoEsquerdo, String
					// pPolegarEsquerdo) {
					ret = carregaFormula(pidctc005);
					if (idctc005.getConf().equals("N")) {
						break;
					}

				}
				if (vwDidcad.registrosProcessados() == 0) {
					idcpc005A.enviarMensagem("operacao", "");
					return;
				}
				if (vwDidcad.fimDados()) {
					if (i > 0) {
						ret = saida(pidctc005);
					}
				}
			}
			switch (ret) {
			case 0: // Enviar tela
			{
				result.include("idctc005", idctc005);
				sessao.setAtributo("IDCPC005", this);
				idctc005.receberTela(false, result);
				return;
			}
			case 1: // Processou Ok
			{
				iAte = iAte + 14;
				result.include("idctc005", idctc005);
				sessao.setAtributo("IDCPC005", this);
				idctc005.receberTela(false, result);
				return;
			}
			case 2: // Erro consistencia
			{
				result.include("idctc005", idctc005);
				sessao.setAtributo("IDCPC005", this);
				idctc005.receberTela(false, result);
				return;
			}
			case 9: // Deprezar registro
			{

			}
			}
		}
		// if (idctc005.getConf().equals("N")) {
		// continue;
		// }
		sessao.setAtributo("IDCPC005", this);
		result.include("idctc005", idctc005);
		if (!result.used()) {
			idctc005.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		}
	}

	private int carregaFormula(Idctc005 pidctc005) throws Exception {
		i += 1;
		dir = "";
		esq = "";
		idctc005.setNas0(i, vwDidcad.getDataNasc());
		idctc005.setNas0(i, (int) funcoes.sissd002(idctc005.getNas0(i)));
		// INVERTE DATAS

		idctc005.setUfn0(i, vwDidcad.getUfMunicipioNasc());
		idctc005.setReg0(i, vwDidcad.getNumeroRg());
		idctc005.setNom0(i, vwDidcad.getNomeIdent());
		dir = UtilBean.moveSubstring(dir, 0, 7, "A", vwDidcad.getPolegarDireito());
		dir = UtilBean.moveSubstring(dir, 7, 7, "A", vwDidcad.getIndicadorDireito());
		dir = UtilBean.moveSubstring(dir, 14, 7, "A", vwDidcad.getMedioDireito());
		dir = UtilBean.moveSubstring(dir, 21, 7, "A", vwDidcad.getAnularDireito());
		dir = UtilBean.moveSubstring(dir, 28, 7, "A", vwDidcad.getMinimoDireito());
		esq = UtilBean.moveSubstring(esq, 0, 7, "A", vwDidcad.getPolegarEsquerdo());
		esq = UtilBean.moveSubstring(esq, 7, 7, "A", vwDidcad.getIndicadorEsquerdo());
		esq = UtilBean.moveSubstring(esq, 14, 7, "A", vwDidcad.getMedioEsquerdo());
		esq = UtilBean.moveSubstring(esq, 21, 7, "A", vwDidcad.getAnularEsquerdo());
		esq = UtilBean.moveSubstring(esq, 28, 7, "A", vwDidcad.getMinimoEsquerdo());
		idctc005.setMdir(i, dir);
		idctc005.setMesq(i, esq);
		if (i == 14) {
			return saida(pidctc005);
		}
		if (idctc005.getConf().equals("N")) {
			return 9;
		}
		return 0;
	}

	private int saida(Idctc005 pidctc005) throws Exception {
		String msgret = "";

		if (pidctc005 == null) {
			return 0;
		} else {
			idctc005.receberTela(false, result);
			if (idctc005.getConf().equals("N")) {
				return 9;
			}
			if (idctc005.getOpc() == 0) {
				return 9;
			}
			if (idctc005.getOpc() > i) {
				idctc005.enviarMensagem(null, "OPCAO INVALIDA");
				return 2;
			}
		}
		if (!idctc001.getOperacao().equals("CFD")) {
			rotOpcao();
		}
		while (vwDidcad.leituraNumeroRgMaiorig(idctc005.getReg0(idctc005.getOpc()))) {
			idctc001 = idccc001.executar(vwDidcad);
			// COPYCODE CONSULTA
			if (!idctc001.getOperacao().equals("CFD")) {
				rotOpcao();
			}
		}

		idctc005.setConf("S");

		idctc005.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
		// CONSULTA P/FORMULA DATILOSCOPICA
		i = 0;
		for (int i1 = 1; i1 <= 14; i1++) {
			idctc005.setMdir(i1, "");
			idctc005.setMesq(i1, "");
			idctc005.setReg0(i1, 0);
			idctc005.setNom0(i1, "");
		}
		idcpc005A.setMensagemSaida("CONSULTA EFETUADA OK");
		return 1;
	}

	private void relatorio() throws JRException, ParseException, FileNotFoundException {
		report = new Idcpc005Report();
		report.setPageSize(60);
		report.setLineSize(134);
		while (vwDidcad.pesquisa300MaoDireitaMaiorigMaoEsquerdaMaiorig(idcpc005A.getAnu2(), idcpc005A.getInd2(), idcpc005A.getMed2(), idcpc005A.getMin2(), idcpc005A.getPol2(), // maodir,
				idcpc005A.getAnu3(), idcpc005A.getInd3(), idcpc005A.getMed3(), idcpc005A.getMin3(), idcpc005A.getPol3() // maoesq
		)) {

			report.setNomide(vwDidcad.getNomeIdent());
			report.setAnudir(vwDidcad.getAnularDireito());
			report.setAnuesq(vwDidcad.getAnularEsquerdo());
			report.setInddir(vwDidcad.getIndicadorDireito());
			report.setIndesq(vwDidcad.getIndicadorEsquerdo());
			report.setMeddir(vwDidcad.getMedioDireito());
			report.setMedesq(vwDidcad.getMedioEsquerdo());
			report.setMindir(vwDidcad.getMinimoDireito());
			report.setMinesq(vwDidcad.getMinimoEsquerdo());
			report.setNumpos(vwDidcad.getNumeroPosto());
			report.setPoldir(vwDidcad.getPolegarDireito());
			report.setPolesq(vwDidcad.getPolegarEsquerdo());
			report.setRegger(vwDidcad.getNumeroRg());
			// RELATORIO MMC PS=60 LS=134 SG=OFF
			// RELATORIO
			report.gravaRelatorio(2);

			// RELATORIO

		}
		if (vwDidcad.registrosProcessados() == 0) {
			idcpc005A.setMensagemSaida("REGISTRO INEXISTENTE");
		} else {
			idcpc005A.setMensagemSaida("EMISSAO EFETUADA OK");
			report.imprimir();
		}
	}

	private void rotOpcao() {
		funcoes.sissm001(result, sessao);
	} // CHAMA PROGRAMA DE ACORDO COM OPERACAO
		// report.gravaRelatorio( 1);
		// UtilBean.mensagemTexto(" " "*" idcpc005B.getCabecacet() "PAGINA"
		// *PAGE-NUMBER "*" idcpc005B.getCabecaseg() "RELAT. IDCPCA05" "*"
		// idcpc005B.getCabecaide() "DATA" idcpc005A.getDataCorrente()
		// idcpc005B.getDataCorrente() idctc001.getDataCorrente() idctc005.getDataCorrente()
		// "* SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA"
		// "* RELACAO DAS PESSOAS CADASTRADAS NO INSTITUTO DE IDENTIFICACAO"
		// "CIVIL PELA FORMULA DATILOSCOPICA" "-" "FORMATO MAO DIREITA"
		// "FORMATO MAO ESQUERDA" "R. GERAL" "POSTO"
		// "NOME DA PESSOA IDENTIFICADA NO I.I.C." "-");
		// RELATORIO // SISCERRO}}} //UtilBean.mensagemTexto("!  ERROR NUMERO:"
		// *ERROR-NR
		// "    LINHA:" *ERROR-LINE " PROGRAMA:" idcpc005A.getNomeClasse()
		// idctc001.getNomeClasse() idctc005.getNomeClasse() "!");

	private void restaurarEstados(Idcpc005A pidcpc005A, Idctc001 pidctc001, Idctc005 pidctc005) {
		this.idcpc005Anterior = (Idcpc005) sessao.getAtributo("IDCPC005");
		if (pidcpc005A != null) {
			idcpc005A = pidcpc005A;
		} else {
			idcpc005A = this.idcpc005Anterior.idcpc005A;
		}
		idcpc005A.setSessao(sessao);
		if (pidctc001 != null) {
			idctc001 = pidctc001;
		} else {
			idctc001 = this.idcpc005Anterior.idctc001;
		}
		idctc001.setSessao(sessao);
		if (pidctc005 != null) {
			idctc005 = pidctc005;
		} else {
			idctc005 = this.idcpc005Anterior.idctc005;
		}
		idctc005.setSessao(sessao);
		this.faseproc = this.idcpc005Anterior.faseproc;
		this.iAte = this.idcpc005Anterior.iAte;
	}
}
